iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
1
Modern Web

Framework Surfing 30天系列 第 5

Day 5 - 設計前端頁面 - part 1

  • 分享至 

  • xImage
  •  

目前設計的前端畫面長這樣

  1. 桌面版
    https://ithelp.ithome.com.tw/upload/images/20190906/201202449OztgieU3j.png

  2. 手機版
    https://ithelp.ithome.com.tw/upload/images/20190906/20120244d1bnH5vli3.png

新增 Model

然後依照畫面上需要的功能來修改 models,共需要新增五個 models:

  1. Category
package models

// Category defines a category for the app
type Category struct {
	BaseModelSoftDelete
	Name string `gorm:"not null;unique_index:idx_name"`

	Desserts []*Dessert
}

  1. Dessert
package models

import "github.com/gofrs/uuid"

// Dessert defines a dessert for the app
type Dessert struct {
	BaseModelSoftDelete
	Name           string
	Description    *string
	Unit           string
	Amount         int
	AmountMinimum  int
	AmountInterval int
	DegreeTop      string
	DegreeDown     string
	BakingTime     int // minutes
	BigImageURL    string
	SmallImageURL  string
	ThumbnailURL   string

	Steps            []*Step
	IngredientGroups []*IngredientGroup

	CategoryID uuid.UUID
}

  1. Ingredient Group
package models

import "github.com/gofrs/uuid"

// IngredientGroup defines a ingredientGroup for the app
type IngredientGroup struct {
	BaseModelSoftDelete
	Name string

	Ingredients []*Ingredient

	DessertID uuid.UUID
}

  1. Ingredient
package models

import "github.com/gofrs/uuid"

// Ingredient defines a ingredient for the app
type Ingredient struct {
	BaseModelSoftDelete
	Name   string
	Unit   string
	Amount int

	IngredientGroupID uuid.UUID
}

  1. Step
package models

import "github.com/gofrs/uuid"

// Step defines a step for the app
type Step struct {
	BaseModelSoftDelete
	Name    string
	Content string
	Notice  string
	Order   int

	DessertID uuid.UUID
}

需要注意

在改寫的過程發現 schema.graphql 有個地方要小心,用目前的 models 來舉例

錯誤的寫法

type Category {
  id: ID!
  name: String!
  createdAt: Time!
  updatedAt: Time
  desserts: [Dessert!]
}

正確的寫法

type Category {
  id: ID!
  name: String!
  createdAt: Time!
  updatedAt: Time
  dessertList: [Dessert!]
}

第一種寫法會讓 gqlgen 沒辦法幫忙生出 Category 的 Desserts resolver,所以往下的查詢就會斷掉,例如我們這樣查詢,就會發現只有 Categories 的 resolver 被觸發,會造成沒辦法拿到下層的資料。

query {
  categories {
    id
    name
    dessertList {
	  id
      name
      stepList {
        name
        order
        content
        notice
      }
      ingredientGroupList {
        name
        ingredientList {
          name
          amount
          unit
        }
      }
    }
  }
}

完整程式碼 https://github.com/wtlin1228/go-gql-server

後言

有一些東西是需要加到這個專案的,像是 dataloader、permissions、complexity,但由於時間的關係就先擱著,畢竟我的目的是要寫一個 graphql server 來給前端用,接下來我就會以這個後端以及設計稿開始來實作前端囉,第一個框架就選 React 吧。


上一篇
Day 4 - API server (Go, GraphQL) - part4
下一篇
Day 6 - React with Apollo - part 1
系列文
Framework Surfing 30天6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言